<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>D:\workspace-sts-3.8.1.RELEASE\easyee-doc\github\doc\SMSpringBoot\.EasyEE-smspringboot-readme-en.md.html</title>


<style type="text/css">
body {
	color: #333;
	font: 13px/1.4 "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif;
	padding: 0;
	margin: 0;
}

a {
	background: transparent;
	color: #4183c4;
	text-decoration: none;
}

a:active,
a:hover {
	outline: 0 none;
	text-decoration: underline;
}

abbr[title] {
	border-bottom: 1px dotted;
}

b,
strong {
	font-weight: bold;
}

dfn {
	font-style: italic;
}
h1 {
	font-size: 2em;
	margin: 0.67em 0;
}
mark {
	background: #ff0;
	color: #000;
}
small {
	font-size: 80%;
}
sub, sup {
	font-size: 75%;
	line-height: 0;
	position: relative;
	vertical-align: baseline;
}
sup {
	top: -0.5em;
}
sub {
	bottom: -0.25em;
}
img {
	border: 0 none;
}
svg:not(:root) {
	overflow: hidden;
}
figure {
	margin: 1em 40px;
}
hr {
	box-sizing: content-box;
	height: 0;
}

code,
kbd,
pre,
samp {
	font-family: monospace,monospace;
	font-size: 1em;
}

pre {
	overflow: auto;
	font: 12px Consolas,"Liberation Mono",Menlo,Courier,monospace;
	margin-bottom: 0;
	margin-top: 0;
}

.markdown-body {
	padding: 30px;
	font-size: 16px;
	line-height: 1.6;
	word-wrap: break-word;
}

.markdown-body>*:first-child {
	margin-top: 0 !important;
}

.markdown-body>*:last-child {
	margin-bottom: 0 !important;
}

.markdown-body .absent {
	color: #c00;
}

.markdown-body .anchor {
	position: absolute;
	top: 0;
	bottom: 0;
	left: 0;
	display: block;
	padding-right: 6px;
	padding-left: 30px;
	margin-left: -30px;
}

.markdown-body .anchor:focus {
	outline: none;
}

.markdown-body h1,
.markdown-body h2,
.markdown-body h3,
.markdown-body h4,
.markdown-body h5,
.markdown-body h6 {
	position: relative;
	margin-top: 1em;
	margin-bottom: 16px;
	font-weight: bold;
	line-height: 1.4;
}

.markdown-body h1 .octicon-link,
.markdown-body h2 .octicon-link,
.markdown-body h3 .octicon-link,
.markdown-body h4 .octicon-link,
.markdown-body h5 .octicon-link,
.markdown-body h6 .octicon-link {
	display: none;
	color: #000;
	vertical-align: middle;
}

.markdown-body h1:hover .anchor,
.markdown-body h2:hover .anchor,
.markdown-body h3:hover .anchor,
.markdown-body h4:hover .anchor,
.markdown-body h5:hover .anchor,
.markdown-body h6:hover .anchor {
	padding-left: 8px;
	margin-left: -30px;
	line-height: 1;
	text-decoration: none;
}

.markdown-body h1:hover .anchor .octicon-link,
.markdown-body h2:hover .anchor .octicon-link,
.markdown-body h3:hover .anchor .octicon-link,
.markdown-body h4:hover .anchor .octicon-link,
.markdown-body h5:hover .anchor .octicon-link,
.markdown-body h6:hover .anchor .octicon-link {
	display: inline-block;
}

.markdown-body h1 tt,
.markdown-body h1 code,
.markdown-body h2 tt,
.markdown-body h2 code,
.markdown-body h3 tt,
.markdown-body h3 code,
.markdown-body h4 tt,
.markdown-body h4 code,
.markdown-body h5 tt,
.markdown-body h5 code,
.markdown-body h6 tt,
.markdown-body h6 code {
	font-size: inherit;
}

.markdown-body h1 {
	padding-bottom: 0.3em;
	font-size: 2.25em;
	line-height: 1.2;
	border-bottom: 1px solid #eee;
}

.markdown-body h2 {
	padding-bottom: 0.3em;
	font-size: 1.75em;
	line-height: 1.225;
	border-bottom: 1px solid #eee;
}

.markdown-body h3 {
	font-size: 1.5em;
	line-height: 1.43;
}

.markdown-body h4 {
	font-size: 1.25em;
}

.markdown-body h5 {
	font-size: 1em;
}

.markdown-body h6 {
	font-size: 1em;
	color: #777;
}

.markdown-body p,.markdown-body blockquote,
.markdown-body ul,.markdown-body ol,
.markdown-body dl,.markdown-body table,
.markdown-body pre {
	margin-top: 0;
	margin-bottom: 16px;
}

.markdown-body hr {
	height: 4px;
	padding: 0;
	margin: 16px 0;
	background-color: #e7e7e7;
	border: 0 none;
}

.markdown-body ul,
.markdown-body ol {
	padding-left: 2em;
}

.markdown-body ul.no-list,
.markdown-body ol.no-list {
	padding: 0;
	list-style-type: none;
}

.markdown-body ul ul,
.markdown-body ul ol,
.markdown-body ol ol,
.markdown-body ol ul {
	margin-top: 0;
	margin-bottom: 0;
}

.markdown-body li>p {
	margin-top: 16px;
}

.markdown-body dl {
	padding: 0;
}

.markdown-body dl dt {
	padding: 0;
	margin-top: 16px;
	font-size: 1em;
	font-style: italic;
	font-weight: bold;
}

.markdown-body dl dd {
	padding: 0 16px;
	margin-bottom: 16px;
}

.markdown-body blockquote {
	padding: 0 15px;
	color: #777;
	border-left: 4px solid #ddd;
}

.markdown-body blockquote>:first-child {
	margin-top: 0;
}

.markdown-body blockquote>:last-child {
	margin-bottom: 0;
}

.markdown-body table {
	display: block;
	width: 100%;
	overflow: auto;
	word-break: normal;
	word-break: keep-all;
}

.markdown-body table th {
	font-weight: bold;
}

.markdown-body table th,
.markdown-body table td {
	padding: 6px 13px;
	border: 1px solid #ddd;
}

.markdown-body table tr {
	background-color: #fff;
	border-top: 1px solid #ccc;
}

.markdown-body table tr:nth-child(2n) {
	background-color: #f8f8f8;
}

.markdown-body img {
	max-width: 100%;
	-moz-box-sizing: border-box;
	box-sizing: border-box;
}

.markdown-body span.frame {
	display: block;
	overflow: hidden;
}

.markdown-body span.frame>span {
	display: block;
	float: left;
	width: auto;
	padding: 7px;
	margin: 13px 0 0;
	overflow: hidden;
	border: 1px solid #ddd;
}

.markdown-body span.frame span img {
	display: block;
	float: left;
}

.markdown-body span.frame span span {
	display: block;
	padding: 5px 0 0;
	clear: both;
	color: #333;
}

.markdown-body span.align-center {
	display: block;
	overflow: hidden;
	clear: both;
}

.markdown-body span.align-center>span {
	display: block;
	margin: 13px auto 0;
	overflow: hidden;
	text-align: center;
}

.markdown-body span.align-center span img {
	margin: 0 auto;
	text-align: center;
}

.markdown-body span.align-right {
	display: block;
	overflow: hidden;
	clear: both;
}

.markdown-body span.align-right>span {
	display: block;
	margin: 13px 0 0;
	overflow: hidden;
	text-align: right;
}

.markdown-body span.align-right span img {
	margin: 0;
	text-align: right;
}

.markdown-body span.float-left {
	display: block;
	float: left;
	margin-right: 13px;
	overflow: hidden;
}

.markdown-body span.float-left span {
	margin: 13px 0 0;
}

.markdown-body span.float-right {
	display: block;
	float: right;
	margin-left: 13px;
	overflow: hidden;
}

.markdown-body span.float-right>span {
	display: block;
	margin: 13px auto 0;
	overflow: hidden;
	text-align: right;
}

.markdown-body code,.markdown-body tt {
	padding: 0;
	padding-top: 0.2em;
	padding-bottom: 0.2em;
	margin: 0;
	font-size: 85%;
	background-color: rgba(0,0,0,0.04);
	border-radius: 3px;
}

.markdown-body code:before,
.markdown-body code:after,
.markdown-body tt:before,
.markdown-body tt:after {
	letter-spacing: -0.2em;
	content: "\00a0";
}

.markdown-body code br,
.markdown-body tt br {
	display: none;
}

.markdown-body del code {
	text-decoration: inherit;
}

.markdown-body pre>code {
	padding: 0;
	margin: 0;
	font-size: 100%;
	word-break: normal;
	white-space: pre;
	background: transparent;
	border: 0;
}

.markdown-body .highlight {
	margin-bottom: 16px;
}

.markdown-body .highlight pre,
.markdown-body pre {
	padding: 16px;
	overflow: auto;
	font-size: 85%;
	line-height: 1.45;
	background-color: #f7f7f7;
	border-radius: 3px;
}

.markdown-body .highlight pre {
	margin-bottom: 0;
	word-break: normal;
}

.markdown-body pre {
	word-wrap: normal;
}

.markdown-body pre code,
.markdown-body pre tt {
	display: inline;
	max-width: initial;
	padding: 0;
	margin: 0;
	overflow: initial;
	line-height: inherit;
	word-wrap: normal;
	background-color: transparent;
	border: 0;
}

.markdown-body pre code:before,
.markdown-body pre code:after,
.markdown-body pre tt:before,
.markdown-body pre tt:after {
	content: normal;
}

.highlight .pl-coc,
.highlight .pl-entl,
.highlight .pl-entm,
.highlight .pl-eoa,
.highlight .pl-mai .pl-sf,
.highlight .pl-mm,
.highlight .pl-pdv,
.highlight .pl-sc,
.highlight .pl-som,
.highlight .pl-sr,
.highlight .pl-v,
.highlight .pl-vpf {
	color: #0086b3;
}
.highlight .pl-eoac,
.highlight .pl-mdht,
.highlight .pl-mi1,
.highlight .pl-mri,
.highlight .pl-va,
.highlight .pl-vpu {
	color: #008080;
}
.highlight .pl-c,
.highlight .pl-pdc {
	color: #b4b7b4;
	font-style: italic;
}
.highlight .pl-k,
.highlight .pl-ko,
.highlight .pl-kolp,
.highlight .pl-mc,
.highlight .pl-mr,
.highlight .pl-ms,
.highlight .pl-s,
.highlight .pl-sok,
.highlight .pl-st {
	color: #6e5494;
}
.highlight .pl-ef,
.highlight .pl-enf,
.highlight .pl-enm,
.highlight .pl-entc,
.highlight .pl-eoi,
.highlight .pl-sf,
.highlight .pl-smc {
	color: #d12089;
}
.highlight .pl-ens,
.highlight .pl-eoai,
.highlight .pl-kos,
.highlight .pl-mh .pl-pdh,
.highlight .pl-mp,
.highlight .pl-pde,
.highlight .pl-stp {
	color: #458;
}
.highlight .pl-enti {
	color: #d12089;
	font-weight: bold;
}
.highlight .pl-cce,
.highlight .pl-enc,
.highlight .pl-kou,
.highlight .pl-mq {
	color: #f93;
}
.highlight .pl-mp1 .pl-sf {
	color: #458;
	font-weight: bold;
}
.highlight .pl-cos,
.highlight .pl-ent,
.highlight .pl-md,
.highlight .pl-mdhf,
.highlight .pl-ml,
.highlight .pl-pdc1,
.highlight .pl-pds,
.highlight .pl-s1,
.highlight .pl-scp,
.highlight .pl-sol {
	color: #df5000;
}
.highlight .pl-c1,
.highlight .pl-cn,
.highlight .pl-pse,
.highlight .pl-pse .pl-s2,
.highlight .pl-vi {
	color: #a31515;
}
.highlight .pl-mb,
.highlight .pl-pdb {
	color: #df5000;
	font-weight: bold;
}
.highlight .pl-mi,
.highlight .pl-pdi {
	color: #6e5494;
	font-style: italic;
}
.highlight .pl-ms1 {
	background-color: #f5f5f5;
}
.highlight .pl-mdh,
.highlight .pl-mdi {
	font-weight: bold;
}
.highlight .pl-mdr {
	color: #0086b3;
	font-weight: bold;
}
.highlight .pl-s2 {
	color: #333;
}
.highlight .pl-ii {
	background-color: #df5000;
	color: #fff;
}
.highlight .pl-ib {
	background-color: #f93;
}
.highlight .pl-id {
	background-color: #a31515;
	color: #fff;
}
.highlight .pl-iu {
	background-color: #b4b7b4;
}
.highlight .pl-mo {
	color: #969896;
}

</style>


<script type="text/javascript">

function getDocumentScrollTop() 
{
   var res = document.body.scrollTop || document.documentElement.scrollTop || window.pageYOffset || 0;
   // alert(res);
   return res;
}

function setDocumentScrollTop(ypos) 
{
	window.scrollTo(0, ypos);
}

</script>


</head>
<body class="markdown-body">
<h1> <a id="easyee-sm-springboot-platform-development-manual" class="anchor" href="#easyee-sm-springboot-platform-development-manual" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>EasyEE-SM-SpringBoot Platform Development Manual</h1> 
<p>EasyEE is an open source JaveEE enterprise-class rapid development of the basic platform, provide a variety of technical options options, support Spring Boot, Hibernate, MyBatis, Struts, Shiro and other core framework.</p> 
<p>It integrates the widely used framework of JaveEE domain and EasyUI front-end framework. It provides the back-end rights management system, security management framework and common development components based on user, role and permission scheme. Provides infrastructure and specifications for enterprise-level project development.</p> 
<p><a href="https://github.com/ushelp/EasyEE-Auto" title="EasyEE Auto">EasyEE Auto</a> automated code generator is provided.</p> 
<p>Latest version: <code>4.2.0</code></p> 
<h2> <a id="sm-spring-boot-framework" class="anchor" href="#sm-spring-boot-framework" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>SM-Spring Boot Framework</h2> 
<ul> 
 <li><strong>Spring Boot 1.4.2</strong></li> 
 <li><strong>MyBatis 3.4+</strong></li> 
 <li><strong>Shiro 2+</strong></li> 
 <li>EasyCommonDAO</li> 
 <li>EasyShiro </li> 
 <li>EasyFilter</li> 
 <li>EasyUI 1.4.3</li> 
 <li>EasyUIEx 2.2.0</li> 
</ul> 
<h2> <a id="maven-framework-version" class="anchor" href="#maven-framework-version" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Maven framework version</h2> 
<div class="highlight highlight-text-xml">
 <pre>&lt;<span class="pl-ent">java</span>.version&gt;1.7&lt;/<span class="pl-ent">java</span>.version&gt;
&lt;<span class="pl-ent">tomcat</span>.version&gt;8.5.8&lt;/<span class="pl-ent">tomcat</span>.version&gt;

&lt;<span class="pl-ent">spring</span>.version&gt;4.3.4.RELEASE&lt;/<span class="pl-ent">spring</span>.version&gt;
&lt;<span class="pl-ent">springboot</span>.version&gt;1.4.2.RELEASE&lt;/<span class="pl-ent">springboot</span>.version&gt;
&lt;<span class="pl-ent">mybatis</span>.version&gt;3.4.1&lt;/<span class="pl-ent">mybatis</span>.version&gt;
&lt;<span class="pl-ent">org</span>.mybatis.spring.boot.version&gt;1.1.1&lt;/<span class="pl-ent">org</span>.mybatis.spring.boot.version&gt;
&lt;<span class="pl-ent">mysql</span>.version&gt;5.1.34&lt;/<span class="pl-ent">mysql</span>.version&gt;
&lt;<span class="pl-ent">oracle</span>.version&gt;11.2.0.4&lt;/<span class="pl-ent">oracle</span>.version&gt;

&lt;<span class="pl-ent">slf4j</span>.version&gt;1.7.21&lt;/<span class="pl-ent">slf4j</span>.version&gt;
&lt;<span class="pl-ent">log4j2</span>.version&gt;2.7&lt;/<span class="pl-ent">log4j2</span>.version&gt;
&lt;<span class="pl-ent">druid</span>.version&gt;1.0.26&lt;/<span class="pl-ent">druid</span>.version&gt;
&lt;<span class="pl-ent">commonsfileupload</span>.version&gt;1.3.2&lt;/<span class="pl-ent">commonsfileupload</span>.version&gt;
&lt;<span class="pl-ent">gson</span>.version&gt;2.8.0&lt;/<span class="pl-ent">gson</span>.version&gt;
&lt;<span class="pl-ent">jackson</span>.version&gt;2.8.4&lt;/<span class="pl-ent">jackson</span>.version&gt;
&lt;<span class="pl-ent">ognl</span>.version&gt;3.1.12&lt;/<span class="pl-ent">ognl</span>.version&gt;
&lt;<span class="pl-ent">shiro</span>.version&gt;1.2.5&lt;/<span class="pl-ent">shiro</span>.version&gt;
&lt;<span class="pl-ent">easyshiro</span>.version&gt;2.5.0-RELEASE&lt;/<span class="pl-ent">easyshiro</span>.version&gt;
&lt;<span class="pl-ent">easyfilte</span>.version&gt;2.0.1-RELEASE&lt;/<span class="pl-ent">easyfilte</span>.version&gt;
&lt;<span class="pl-ent">jstl</span>.version&gt;1.2&lt;/<span class="pl-ent">jstl</span>.version&gt;</pre>
</div> 
<h2> <a id="easyee-auto" class="anchor" href="#easyee-auto" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>EasyEE Auto</h2> 
<p>EasyEE Automated code generator。</p> 
<p><a href="https://github.com/ushelp/EasyEE-Auto" title="EasyEE Auto">EasyEE Auto</a> </p> 
<h2> <a id="framework-manual" class="anchor" href="#framework-manual" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Framework Manual</h2> 
<ol> 
 <li><p>Project structure </p></li> 
 <li><p>Quick Development Manual </p></li> 
 <li><p>Run with WAR or JAR</p></li> 
 <li><p>Other configuration instructions</p></li> 
</ol> 
<h2> <a id="project-structure" class="anchor" href="#project-structure" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Project structure</h2> 
<div class="highlight highlight-source-js">
 <pre>EasySM<span class="pl-k">-</span>SpringBoot
    <span class="pl-k">+</span> src<span class="pl-k">/</span>main<span class="pl-k">/</span>java 
        <span class="pl-k">+</span> <span class="pl-smi">cn</span>.<span class="pl-smi">easyproject</span>.<span class="pl-smi">easyee</span>.<span class="pl-smi">sm</span> 
            <span class="pl-k">+</span> <span class="pl-en">base</span> (Base Common Package)
                <span class="pl-k">+</span> <span class="pl-en">configuration</span> (Spring Boot Configuration)
                <span class="pl-k">+</span> controller 
                    <span class="pl-k">+</span> <span class="pl-smi">BaseController</span>.<span class="pl-en">java</span>(All Controller <span class="pl-k">extends</span> BaseController)
                <span class="pl-k">+</span> <span class="pl-en">pagination</span> (EasyMyBatis<span class="pl-k">-</span>Pagination) 
                <span class="pl-k">+</span> service
                    <span class="pl-k">+</span> <span class="pl-smi">BaseService</span>.<span class="pl-en">java</span> (All Service <span class="pl-k">extends</span> BaseService)
                <span class="pl-k">+</span> util 
                    <span class="pl-k">+</span> <span class="pl-k">...</span> (PageBean, EasyCriteria, Encryption, Utils<span class="pl-k">...</span>.)
            <span class="pl-k">+</span> <span class="pl-en">sys</span> (<span class="pl-c1">RBAC</span> Package)
                <span class="pl-k">+</span> action, entity, dao, service, util, shiro, criteria<span class="pl-k">...</span> 
            <span class="pl-k">+</span> <span class="pl-en">hr</span>  (Demo Module Package)
                <span class="pl-k">+</span> action, entity, dao, service, criteria<span class="pl-k">...</span>
            <span class="pl-k">+</span> <span class="pl-smi">EasyEEJarApplication</span>.<span class="pl-en">java</span> (Run as jar)
            <span class="pl-k">+</span> <span class="pl-smi">EasyEEWarApplication</span>.<span class="pl-en">java</span> (Run as war)
    <span class="pl-k">+</span> src<span class="pl-k">/</span>main<span class="pl-k">/</span>resource
        <span class="pl-k">+</span> i18n
            <span class="pl-k">+</span> <span class="pl-smi">messages</span>.<span class="pl-en">properties</span> (i18n)
            <span class="pl-k">+</span> <span class="pl-smi">messages_zh_CN</span>.<span class="pl-en">properties</span> (i18n)
        <span class="pl-k">+</span> mybatis
            <span class="pl-k">+</span> mapper
                <span class="pl-k">+</span> hr
                <span class="pl-k">+</span> sys
            <span class="pl-k">+</span> mybatis<span class="pl-k">-</span><span class="pl-smi">config</span>.<span class="pl-smi">xml</span>
        <span class="pl-k">+</span> spring
            <span class="pl-k">+</span> <span class="pl-smi">spring_shiro</span>.<span class="pl-en">xml</span> (Spring Shiro)
        <span class="pl-k">+</span> <span class="pl-k">static</span> (web <span class="pl-k">static</span> resources<span class="pl-k">...</span>)
            <span class="pl-k">+</span> doc
            <span class="pl-k">+</span> error
            <span class="pl-k">+</span> <span class="pl-en">script</span> (project <span class="pl-c1">module</span> js, <span class="pl-k">with</span> <span class="pl-c1">WEB</span><span class="pl-k">-</span><span class="pl-c1">INF</span><span class="pl-k">/</span>content)
                <span class="pl-k">+</span> main
                    <span class="pl-k">+</span> <span class="pl-en">sys</span> (<span class="pl-c1">RBAC</span>)
                    <span class="pl-k">+</span> <span class="pl-smi">main</span>.<span class="pl-en">js</span> (<span class="pl-smi">main</span>.<span class="pl-smi">jsp</span>)
                <span class="pl-k">+</span> <span class="pl-smi">login</span>.<span class="pl-en">js</span> (<span class="pl-smi">login</span>.<span class="pl-smi">jsp</span>) 
            <span class="pl-k">+</span> staticresources
                <span class="pl-k">+</span> easyee 
                    <span class="pl-k">+</span> <span class="pl-en">json</span> (easyssh json<span class="pl-k">:</span> theme, icon)
                    <span class="pl-k">+</span> easyee<span class="pl-k">-</span><span class="pl-smi">sh</span>.<span class="pl-smi">main</span>.<span class="pl-en">js</span> (easyssh core js)
                    <span class="pl-k">+</span> <span class="pl-smi">jquery</span>.<span class="pl-c1">cookie</span>.<span class="pl-smi">js</span> 
                <span class="pl-k">+</span> <span class="pl-en">easyui</span> (EasyUI )
                <span class="pl-k">+</span> <span class="pl-en">easyuiex</span> (EasyUIEx)
                <span class="pl-k">+</span> <span class="pl-en">echarts</span> (EChars)
                <span class="pl-k">+</span> <span class="pl-en">error</span> (<span class="pl-c1">JSP</span> <span class="pl-c1">Error</span> Page)
                <span class="pl-k">+</span> images
                <span class="pl-k">+</span> style 
                    <span class="pl-k">+</span> <span class="pl-smi">easyee</span>.<span class="pl-smi">main</span>.<span class="pl-en">css</span> (easyssh golbal css)
            <span class="pl-k">+</span> <span class="pl-smi">favicon</span>.<span class="pl-smi">ico</span>
        <span class="pl-k">+</span> <span class="pl-smi">application</span>.<span class="pl-en">properties</span> (Spring Boot properties)
        <span class="pl-k">+</span> <span class="pl-smi">banner</span>.<span class="pl-en">txt</span> (Spring Boot Banner) 
        <span class="pl-k">+</span> <span class="pl-smi">easyFilter</span>.<span class="pl-en">properties</span> (EasyFilter Web request filter)
        <span class="pl-k">+</span> <span class="pl-smi">ehcache</span>.<span class="pl-en">xml</span> (ehcache )
        <span class="pl-k">+</span> <span class="pl-smi">log4j</span>.<span class="pl-en">properties</span> (Log4J)
        <span class="pl-k">+</span> <span class="pl-smi">log4j2</span>.<span class="pl-en">xml</span> (Log4J2)
        <span class="pl-k">+</span> <span class="pl-smi">logback</span>.<span class="pl-en">xml</span> (LogBack)
    <span class="pl-k">+</span> src<span class="pl-k">/</span>test<span class="pl-k">/</span>java 
    <span class="pl-k">+</span> src<span class="pl-k">/</span>test<span class="pl-k">/</span>resource 
    <span class="pl-k">+</span> src<span class="pl-k">/</span>main<span class="pl-k">/</span><span class="pl-en">webapp</span> (<span class="pl-c1">JSP</span> dynamic web resources)
        <span class="pl-k">+</span> <span class="pl-c1">META</span><span class="pl-k">-</span><span class="pl-c1">INF</span>
        <span class="pl-k">+</span> <span class="pl-c1">WEB</span><span class="pl-k">-</span><span class="pl-c1">INF</span>
            <span class="pl-k">+</span> <span class="pl-en">content</span> (project page)
                <span class="pl-k">+</span> <span class="pl-en">dialog</span> (EasyUI Dialog)
                    <span class="pl-k">+</span> <span class="pl-en">sys</span> (<span class="pl-c1">RBAC</span>)
                    <span class="pl-k">+</span> <span class="pl-en">hr</span> (Demo <span class="pl-c1">module</span>)
                 <span class="pl-k">+</span> error 
                    <span class="pl-k">+</span> <span class="pl-smi">controllerError</span>.<span class="pl-en">jsp</span> (Controller error)
                    <span class="pl-k">+</span> <span class="pl-smi">notFound</span>.<span class="pl-en">jsp</span> (<span class="pl-c1">404</span> error)
                    <span class="pl-k">+</span> <span class="pl-smi">permissionDenied</span>.<span class="pl-en">jsp</span> (no permission)
                    <span class="pl-k">+</span> <span class="pl-smi">serverError</span>.<span class="pl-en">jsp</span> (<span class="pl-c1">500</span> error)
                <span class="pl-k">+</span> jsp 
                    <span class="pl-k">+</span> <span class="pl-en">echarts</span> (ECharts demo)
                    <span class="pl-k">+</span> <span class="pl-smi">VerifyCode</span>.<span class="pl-en">jsp</span> (<span class="pl-c1">CAPTCHA</span> <span class="pl-c1">JSP</span>)
                <span class="pl-k">+</span> locklogin
                    <span class="pl-k">+</span> <span class="pl-smi">admin</span>.<span class="pl-en">jsp</span> (EasyShiro LockLogin Management)
                <span class="pl-k">+</span> <span class="pl-en">main</span> (EasyUI Core page)
                    <span class="pl-k">+</span> <span class="pl-en">sys</span> (<span class="pl-c1">RBAC</span> page)
                    <span class="pl-k">+</span> <span class="pl-en">hr</span> (Demo Page)
                    <span class="pl-k">+</span> reports
                    <span class="pl-k">+</span> <span class="pl-smi">main</span>.<span class="pl-en">jsp</span> (EasySSH Main Page)
                <span class="pl-k">+</span> <span class="pl-smi">login</span>.<span class="pl-smi">jsp</span> </pre>
</div> 
<h2> <a id="quick-development-manual" class="anchor" href="#quick-development-manual" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Quick Development Manual</h2> 
<ol> 
 <li> <p><strong>Create new moudle package</strong></p> <p>cn.easyproject.easyee.sm.<code>yourmodule</code> cn.easyproject.easyee.sm.yourmodule.<code>entity</code> cn.easyproject.easyee.sm.yourmodule.<code>dao</code> cn.easyproject.easyee.sm.yourmodule.<code>service</code> cn.easyproject.easyee.sm.yourmodule.<code>controller</code> cn.easyproject.easyee.sm.yourmodule.<code>criteria</code></p> </li> 
 <li> <p><strong>Create Entity Class in entity package(Annotaion or XML)</strong></p> 
  <div class="highlight highlight-source-java">
   <pre><span class="pl-k">public</span> <span class="pl-k">class</span> <span class="pl-en">Dept</span> <span class="pl-k">implements</span> <span class="pl-e">java.io<span class="pl-k">.</span>Serializable</span> {
      <span class="pl-c"><span class="pl-c">//</span>...</span>
}</pre>
  </div> </li> 
 <li> <p><strong>Create MyBatis DAO interface and SQL Mapper file</strong></p> 
  <ul> 
   <li> <p>DAO Mapper interface</p> 
    <div class="highlight highlight-source-java">
     <pre><span class="pl-k">public</span> <span class="pl-k">interface</span> <span class="pl-en">DeptDAO</span> {

    <span class="pl-k">public</span> <span class="pl-k">void</span> <span class="pl-en">save</span>(<span class="pl-smi">Dept</span> <span class="pl-v">dept</span>);
    <span class="pl-k">public</span> <span class="pl-k">void</span> <span class="pl-en">delete</span>(<span class="pl-smi">Serializable</span> <span class="pl-v">deptno</span>);
    <span class="pl-k">public</span> <span class="pl-k">void</span> <span class="pl-en">update</span>(<span class="pl-smi">Dept</span> <span class="pl-v">dept</span>);
    <span class="pl-k">public</span> <span class="pl-smi">Dept</span> <span class="pl-en">get</span>(<span class="pl-smi">Integer</span> <span class="pl-v">deptno</span>);

    <span class="pl-k">public</span> <span class="pl-k">List&lt;<span class="pl-smi">Dept</span>&gt;</span> <span class="pl-en">findAll</span>();
    <span class="pl-k">public</span> <span class="pl-k">int</span> <span class="pl-en">findMaxRow</span>();

    <span class="pl-k">@SuppressWarnings</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>rawtypes<span class="pl-pds">&quot;</span></span>)
    <span class="pl-k">public</span> <span class="pl-smi">List</span> <span class="pl-en">pagination</span>(<span class="pl-smi">PageBean</span> <span class="pl-v">pageBean</span>);
}</pre>
    </div> </li> 
   <li> <p>SQL Mapper XML(src/main/resource/mybatis/mapper/<code>yourmodule</code>/DeptDAO.xml)</p> 
    <div class="highlight highlight-text-xml">
     <pre>&lt;?<span class="pl-ent">xml</span><span class="pl-e"> version</span>=<span class="pl-s"><span class="pl-pds">&quot;</span>1.0<span class="pl-pds">&quot;</span></span><span class="pl-e"> encoding</span>=<span class="pl-s"><span class="pl-pds">&quot;</span>UTF-8<span class="pl-pds">&quot;</span></span>?&gt;
&lt;!<span class="pl-k">DOCTYPE</span> <span class="pl-c1">mapper</span>
  PUBLIC &quot;-//mybatis.org//DTD Mapper 3.0//EN&quot;
  &quot;http://mybatis.org/dtd/mybatis-3-mapper.dtd&quot;&gt;
&lt;<span class="pl-ent">mapper</span> <span class="pl-e">namespace</span>=<span class="pl-s"><span class="pl-pds">&quot;</span>cn.easyproject.easyee.sm.hr.dao.DeptDAO<span class="pl-pds">&quot;</span></span>&gt;

    &lt;<span class="pl-ent">insert</span> <span class="pl-e">id</span>=<span class="pl-s"><span class="pl-pds">&quot;</span>save<span class="pl-pds">&quot;</span></span>&gt;
        insert into module_dept(dname,loc) values(#{dname},#{loc})
    &lt;/<span class="pl-ent">insert</span>&gt;
    &lt;<span class="pl-ent">delete</span> <span class="pl-e">id</span>=<span class="pl-s"><span class="pl-pds">&quot;</span>delete<span class="pl-pds">&quot;</span></span>&gt;
        delete from module_dept where deptno=#{deptno}
    &lt;/<span class="pl-ent">delete</span>&gt;
    &lt;<span class="pl-ent">update</span> <span class="pl-e">id</span>=<span class="pl-s"><span class="pl-pds">&quot;</span>update<span class="pl-pds">&quot;</span></span>&gt;
        update module_dept set dname=#{dname},loc=#{loc} where deptno=#{deptno}
    &lt;/<span class="pl-ent">update</span>&gt;
    &lt;<span class="pl-ent">select</span> <span class="pl-e">id</span>=<span class="pl-s"><span class="pl-pds">&quot;</span>get<span class="pl-pds">&quot;</span></span> <span class="pl-e">resultType</span>=<span class="pl-s"><span class="pl-pds">&quot;</span>Dept<span class="pl-pds">&quot;</span></span>&gt;
        select * from module_dept where deptno=#{deptno}
    &lt;/<span class="pl-ent">select</span>&gt;

    &lt;<span class="pl-ent">select</span> <span class="pl-e">id</span>=<span class="pl-s"><span class="pl-pds">&quot;</span>findAll<span class="pl-pds">&quot;</span></span> <span class="pl-e">resultType</span>=<span class="pl-s"><span class="pl-pds">&quot;</span>Dept<span class="pl-pds">&quot;</span></span>&gt;
        select * from module_dept
    &lt;/<span class="pl-ent">select</span>&gt;
    &lt;<span class="pl-ent">select</span> <span class="pl-e">id</span>=<span class="pl-s"><span class="pl-pds">&quot;</span>findMaxRow<span class="pl-pds">&quot;</span></span> <span class="pl-e">resultType</span>=<span class="pl-s"><span class="pl-pds">&quot;</span>int<span class="pl-pds">&quot;</span></span>&gt;
        select count(*) from module_dept
    &lt;/<span class="pl-ent">select</span>&gt;

    <span class="pl-c"><span class="pl-c">&lt;!--</span> EasyMyBatis-Pagination <span class="pl-c">--&gt;</span></span>
    &lt;<span class="pl-ent">select</span> <span class="pl-e">id</span>=<span class="pl-s"><span class="pl-pds">&quot;</span>pagination<span class="pl-pds">&quot;</span></span> <span class="pl-e">resultType</span>=<span class="pl-s"><span class="pl-pds">&quot;</span>Dept<span class="pl-pds">&quot;</span></span>&gt;
        ${autoSQL}
    &lt;/<span class="pl-ent">select</span>&gt;
&lt;/<span class="pl-ent">mapper</span>&gt;</pre>
    </div> </li> 
  </ul> </li> 
 <li> <p><strong>Create Service in service package</strong></p> 
  <ul> 
   <li> <p>Interface, Use <code>@Transactional</code> to declare transaction</p> 
    <div class="highlight highlight-source-java">
     <pre><span class="pl-k">@Transactional</span>
<span class="pl-k">public</span> <span class="pl-k">interface</span> <span class="pl-en">DeptService</span> {
    <span class="pl-k">public</span> <span class="pl-k">void</span> <span class="pl-en">save</span>(<span class="pl-smi">Dept</span> <span class="pl-v">dept</span>);
    <span class="pl-k">public</span> <span class="pl-k">void</span> <span class="pl-en">delete</span>(<span class="pl-smi">Serializable</span> <span class="pl-v">deptno</span>);
    <span class="pl-k">public</span> <span class="pl-k">void</span> <span class="pl-en">update</span>(<span class="pl-smi">Dept</span> <span class="pl-v">dept</span>);
    <span class="pl-k">@Transactional</span>(<span class="pl-c1">readOnly</span><span class="pl-k">=</span><span class="pl-c1">true</span>)
    <span class="pl-k">public</span> <span class="pl-smi">Dept</span> <span class="pl-en">get</span>(<span class="pl-smi">Integer</span> <span class="pl-v">deptno</span>);

    <span class="pl-k">@SuppressWarnings</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>rawtypes<span class="pl-pds">&quot;</span></span>)
    <span class="pl-k">@Transactional</span>(<span class="pl-c1">readOnly</span><span class="pl-k">=</span><span class="pl-c1">true</span>)
    <span class="pl-k">public</span> <span class="pl-k">void</span> <span class="pl-en">findByPage</span>(<span class="pl-smi">PageBean</span> <span class="pl-v">pageBean</span>, <span class="pl-smi">DeptCriteria</span> <span class="pl-v">deptCriteria</span>);

    <span class="pl-k">@Transactional</span>(<span class="pl-c1">readOnly</span><span class="pl-k">=</span><span class="pl-c1">true</span>)
    <span class="pl-k">public</span> <span class="pl-k">List&lt;<span class="pl-smi">Dept</span>&gt;</span> <span class="pl-en">findAll</span>();
}</pre>
    </div> </li> 
   <li> <p>Implements in <code>service.impl</code></p> 
    <ul> 
     <li><p>extends BaseService</p></li> 
     <li><p>use @Service</p></li> 
    </ul> 
    <div class="highlight highlight-source-java">
     <pre><span class="pl-c"><span class="pl-c">/*</span>*</span>
<span class="pl-c">* Must extends BaseService</span>
<span class="pl-c">* </span>
<span class="pl-c">* @author easyproject.cn</span>
<span class="pl-c">* @version 1.0</span>
<span class="pl-c">*</span>
<span class="pl-c"><span class="pl-c">*/</span></span>
<span class="pl-k">@Service</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>deptService<span class="pl-pds">&quot;</span></span>)
<span class="pl-k">public</span> <span class="pl-k">class</span> <span class="pl-en">DeptServiceImpl</span> <span class="pl-k">extends</span> <span class="pl-e">BaseService</span> <span class="pl-k">implements</span> <span class="pl-e">DeptService</span> {

    <span class="pl-k">@Resource</span>
    <span class="pl-smi">DeptDAO</span> deptDAO;

    <span class="pl-k">@Override</span>
    <span class="pl-k">public</span> <span class="pl-k">void</span> <span class="pl-en">save</span>(<span class="pl-smi">Dept</span> <span class="pl-v">dept</span>) {
        deptDAO<span class="pl-k">.</span>save(dept);
    }

    <span class="pl-k">@Override</span>
    <span class="pl-k">public</span> <span class="pl-k">void</span> <span class="pl-en">delete</span>(<span class="pl-smi">Serializable</span> <span class="pl-v">deptno</span>) {
        deptDAO<span class="pl-k">.</span>delete(deptno);
    }

    <span class="pl-k">@Override</span>
    <span class="pl-k">public</span> <span class="pl-k">void</span> <span class="pl-en">update</span>(<span class="pl-smi">Dept</span> <span class="pl-v">dept</span>) {
        deptDAO<span class="pl-k">.</span>update(dept);
    }

    <span class="pl-k">@Override</span>
    <span class="pl-k">public</span> <span class="pl-smi">Dept</span> <span class="pl-en">get</span>(<span class="pl-smi">Integer</span> <span class="pl-v">deptno</span>) {
        <span class="pl-k">return</span> deptDAO<span class="pl-k">.</span>get(deptno);
    }

    <span class="pl-k">@SuppressWarnings</span>({ <span class="pl-s"><span class="pl-pds">&quot;</span>rawtypes<span class="pl-pds">&quot;</span></span>})
    <span class="pl-k">@Override</span>
    <span class="pl-k">public</span> <span class="pl-k">void</span> <span class="pl-en">findByPage</span>(<span class="pl-smi">PageBean</span> <span class="pl-v">pageBean</span>, <span class="pl-smi">DeptCriteria</span> <span class="pl-v">deptCriteria</span>) {
        pageBean<span class="pl-k">.</span>setFrom(<span class="pl-s"><span class="pl-pds">&quot;</span>module_dept dept<span class="pl-pds">&quot;</span></span>);
        pageBean<span class="pl-k">.</span>setSelect(<span class="pl-s"><span class="pl-pds">&quot;</span>dept.*<span class="pl-pds">&quot;</span></span>);
        pageBean<span class="pl-k">.</span>setEasyCriteria(deptCriteria);
        deptDAO<span class="pl-k">.</span>pagination(pageBean);
    }

    <span class="pl-k">@Override</span>
    <span class="pl-k">public</span> <span class="pl-k">List&lt;<span class="pl-smi">Dept</span>&gt;</span> <span class="pl-en">findAll</span>() {
        <span class="pl-k">return</span> deptDAO<span class="pl-k">.</span>findAll();
    }
}</pre>
    </div> </li> 
  </ul> </li> 
 <li> <p><strong>Create a Controller</strong></p> 
  <div class="highlight highlight-source-java">
   <pre>  <span class="pl-c"><span class="pl-c">/*</span>*</span>
<span class="pl-c">   * Must extends BaseController</span>
<span class="pl-c">   * </span>
<span class="pl-c">   * BaseController: </span>
<span class="pl-c">   * - request, application Servlet API </span>
<span class="pl-c">   * - JSON result</span>
<span class="pl-c">   * - JSON response method: setJsonMap,setJsonMsgMap,setJsonPaginationMap(PageBean, Object...) </span>
<span class="pl-c">   * - Get PageBean Object：super.getPageBean() </span>
<span class="pl-c">   * </span>
<span class="pl-c">   * </span>
<span class="pl-c">   * @author easyproject.cn</span>
<span class="pl-c">   * @version 1.0</span>
<span class="pl-c">   *</span>
<span class="pl-c">   <span class="pl-c">*/</span></span>
  <span class="pl-k">@RestController</span>
  <span class="pl-k">@RequestMapping</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>Dept<span class="pl-pds">&quot;</span></span>)
  <span class="pl-k">public</span> <span class="pl-k">class</span> <span class="pl-en">DeptController</span> <span class="pl-k">extends</span> <span class="pl-e">BaseController</span> {

      <span class="pl-k">@Resource</span>
      <span class="pl-k">private</span> <span class="pl-smi">DeptService</span> deptService;

      <span class="pl-k">@Resource</span>
      <span class="pl-k">private</span> <span class="pl-smi">EmpService</span> empService;

      <span class="pl-c"><span class="pl-c">/*</span>*</span>
<span class="pl-c">       * Forward page</span>
<span class="pl-c">       * @return</span>
<span class="pl-c">       <span class="pl-c">*/</span></span>
      <span class="pl-k">@RequestMapping</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>page<span class="pl-pds">&quot;</span></span>)
      <span class="pl-k">public</span> <span class="pl-smi">ModelAndView</span> <span class="pl-en">page</span>(<span class="pl-smi">ModelAndView</span> <span class="pl-v">mv</span>){
          mv<span class="pl-k">.</span>setViewName(<span class="pl-s"><span class="pl-pds">&quot;</span>main/hr/Dept<span class="pl-pds">&quot;</span></span>);
          <span class="pl-k">return</span> mv;
      }
      <span class="pl-c"><span class="pl-c">/*</span>*</span>
<span class="pl-c">       * CRUD</span>
<span class="pl-c">       * @return</span>
<span class="pl-c">       <span class="pl-c">*/</span></span>
      <span class="pl-k">@RequestMapping</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>save<span class="pl-pds">&quot;</span></span>)
      <span class="pl-k">public</span> <span class="pl-k">Map&lt;<span class="pl-smi">Object</span>,<span class="pl-smi">Object</span>&gt;</span> <span class="pl-en">save</span>(<span class="pl-smi">Dept</span> <span class="pl-v">dept</span>){
          <span class="pl-k">try</span> {
              deptService<span class="pl-k">.</span>save(dept);
              <span class="pl-c1">super</span><span class="pl-k">.</span>setMsgKey(<span class="pl-s"><span class="pl-pds">&quot;</span>msg.saveSuccess<span class="pl-pds">&quot;</span></span>);
          } <span class="pl-k">catch</span> (<span class="pl-smi">Exception</span> e) {
              e<span class="pl-k">.</span>printStackTrace();
              <span class="pl-c1">super</span><span class="pl-k">.</span>setMsgKey(<span class="pl-s"><span class="pl-pds">&quot;</span>msg.saveFail<span class="pl-pds">&quot;</span></span>);
              <span class="pl-c1">super</span><span class="pl-k">.</span>setStatusCode(<span class="pl-smi">StatusCode</span><span class="pl-c1"><span class="pl-k">.</span>ERROR</span>); <span class="pl-c"><span class="pl-c">//</span>默认为OK</span>
          }

          <span class="pl-c"><span class="pl-c">/*</span></span>
<span class="pl-c">           * Ajax</span>
<span class="pl-c">           * {</span>
<span class="pl-c">           * statusCode: ;  </span>
<span class="pl-c">           * msg: ;   </span>
<span class="pl-c">           * callback: ,</span>
<span class="pl-c">           * locationUrl: </span>
<span class="pl-c">           * }</span>
<span class="pl-c">           <span class="pl-c">*/</span></span>
          <span class="pl-c"><span class="pl-c">//</span> super.setJsonMsgMap();</span>


          <span class="pl-c"><span class="pl-c">//</span> When add data, to update page row data</span>
          <span class="pl-k">return</span> <span class="pl-c1">super</span><span class="pl-k">.</span>setJsonMsgMap(<span class="pl-s"><span class="pl-pds">&quot;</span>rowData<span class="pl-pds">&quot;</span></span>, dept);

          <span class="pl-c"><span class="pl-c">//</span> if you need goto last page</span>
  <span class="pl-c"><span class="pl-c">//</span>      int page = deptService.findMaxPage(rows);</span>
  <span class="pl-c"><span class="pl-c">//</span>      return super.setJsonMsgMap(&quot;rowData&quot;, dept, &quot;page&quot;, page);</span>
      }

      <span class="pl-c"><span class="pl-c">/*</span>*</span>
<span class="pl-c">       * Pagination</span>
<span class="pl-c">       * @return</span>
<span class="pl-c">       <span class="pl-c">*/</span></span>
      <span class="pl-k">@SuppressWarnings</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>rawtypes<span class="pl-pds">&quot;</span></span>)
      <span class="pl-k">@RequestMapping</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>list<span class="pl-pds">&quot;</span></span>)
      <span class="pl-k">public</span> <span class="pl-k">Map&lt;<span class="pl-smi">Object</span>,<span class="pl-smi">Object</span>&gt;</span> <span class="pl-en">list</span>(<span class="pl-smi">DeptCriteria</span> <span class="pl-v">deptCriteria</span>){
          <span class="pl-smi">PageBean</span> pb <span class="pl-k">=</span> <span class="pl-c1">super</span><span class="pl-k">.</span>getPageBean(); <span class="pl-c"><span class="pl-c">//</span> Get PageBean object</span>
          deptService<span class="pl-k">.</span>findByPage(pb,deptCriteria);
          <span class="pl-k">return</span> <span class="pl-c1">super</span><span class="pl-k">.</span>setJsonPaginationMap(pb);
      }

      <span class="pl-k">@RequestMapping</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>delete<span class="pl-pds">&quot;</span></span>)
      <span class="pl-k">public</span> <span class="pl-k">Map&lt;<span class="pl-smi">Object</span>,<span class="pl-smi">Object</span>&gt;</span> <span class="pl-en">delete</span>(<span class="pl-smi">Dept</span> <span class="pl-v">dept</span>){
          <span class="pl-k">try</span> {
              <span class="pl-k">if</span>(empService<span class="pl-k">.</span>findEmpCountByDeptno(dept<span class="pl-k">.</span>getDeptno())<span class="pl-k">==</span><span class="pl-c1">0</span>){
                  deptService<span class="pl-k">.</span>delete(dept<span class="pl-k">.</span>getDeptno());
              }<span class="pl-k">else</span>{
                  <span class="pl-c1">super</span><span class="pl-k">.</span>setMsgKey(<span class="pl-s"><span class="pl-pds">&quot;</span>hr.DeptController.empExists<span class="pl-pds">&quot;</span></span>);
                  <span class="pl-c1">super</span><span class="pl-k">.</span>setStatusCode(<span class="pl-smi">StatusCode</span><span class="pl-c1"><span class="pl-k">.</span>ERROR</span>);
              }
          } <span class="pl-k">catch</span> (<span class="pl-smi">Exception</span> e) {
              e<span class="pl-k">.</span>printStackTrace();
              <span class="pl-c1">super</span><span class="pl-k">.</span>setStatusCode(<span class="pl-smi">StatusCode</span><span class="pl-c1"><span class="pl-k">.</span>ERROR</span>); <span class="pl-c"><span class="pl-c">//</span> Default is OK</span>
          }
          <span class="pl-k">return</span> <span class="pl-c1">super</span><span class="pl-k">.</span>setJsonMsgMap();
      }

      <span class="pl-k">@RequestMapping</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>update<span class="pl-pds">&quot;</span></span>)
      <span class="pl-k">public</span> <span class="pl-k">Map&lt;<span class="pl-smi">Object</span>,<span class="pl-smi">Object</span>&gt;</span> <span class="pl-en">update</span>(<span class="pl-smi">Dept</span> <span class="pl-v">dept</span>){
          <span class="pl-k">try</span> {
              deptService<span class="pl-k">.</span>update(dept);
              <span class="pl-c1">super</span><span class="pl-k">.</span>setMsgKey(<span class="pl-s"><span class="pl-pds">&quot;</span>msg.updateSuccess<span class="pl-pds">&quot;</span></span>);
          } <span class="pl-k">catch</span> (<span class="pl-smi">Exception</span> e) {
              e<span class="pl-k">.</span>printStackTrace();
              <span class="pl-c1">super</span><span class="pl-k">.</span>setMsgKey(<span class="pl-s"><span class="pl-pds">&quot;</span>msg.updateFail<span class="pl-pds">&quot;</span></span>);
              <span class="pl-c1">super</span><span class="pl-k">.</span>setStatusCode(<span class="pl-smi">StatusCode</span><span class="pl-c1"><span class="pl-k">.</span>ERROR</span>); <span class="pl-c"><span class="pl-c">//</span> Default is OK</span>
          }

          <span class="pl-k">return</span> <span class="pl-c1">super</span><span class="pl-k">.</span>setJsonMsgMap();
      }
  }</pre>
  </div> </li> 
 <li> <p><strong>Page</strong></p> 
  <ul> 
   <li> <p>Create folder：</p> 
    <ul> 
     <li><p><code>webapp/WEB-INF/content/main/yourmodule</code>(EasyUI page)</p></li> 
     <li><p><code>webapp/WEB-INF/content/dialog/yourmodule</code>(EasyUI Dialog page)</p></li> 
    </ul> </li> 
   <li> <p>Develop Page</p> 
    <ul> 
     <li>EasyEE use <code>EasyUI Tabs</code> of <code>href</code> include page,. </li> 
    </ul> 
    <blockquote> 
     <p>EasyUI Two Dynamic Tabs difference between dynamic loading:</p> 
     <p><strong>-Use content (iframe frame) the introduction page:</strong> content : ''; Exist as a separate window, the page content independent, non-interfering with the current page Need to introduce independent JS and CSS resources needed Pop-up content is within the window</p> 
     <p><strong>-Use href methods:</strong> href : url, A piece of content is loaded, the introduction of the contents of the current page and merge Need to introduce JS and CSS resource page has introduced Reference page can not have a body, or the contents of the internal loads of grammar JS file execution Html rendering prompt resolution displays To prevent inter-page DOM element, naming conflicts of JS (DOM unique name should be the same prefix, JS using namespaces)</p> 
    </blockquote> <p>-To prevent unique prefix naming conflicts between pages DOM elements, you should use unified DOM element for each page</p> 
    <ul> 
     <li>In order to prevent inter-page JavaScript variable naming conflicts should be defined only operating namespace for each page, all registration functions into the namespace</li> 
     <li>Recommended default development is structured as follows:</li> 
    </ul> 
    <div class="highlight highlight-text-html-jsp">
     <pre>  <span class="pl-c"><span class="pl-c">&lt;%--</span> 1. Page Datagrid initialization related JS <span class="pl-c">--%&gt;</span></span>

<span class="pl-s1">  &lt;<span class="pl-ent">script</span> <span class="pl-e">type</span>=<span class="pl-s"><span class="pl-pds">&quot;</span>text/javascript<span class="pl-pds">&quot;</span></span>&gt;</span>
<span class="pl-s1">  <span class="pl-c"><span class="pl-c">//</span> To avoid naming conflicts, define a unique operating namespace for each page</span></span>
<span class="pl-s1">  <span class="pl-c"><span class="pl-c">//</span> All functions registered into the namespace</span></span>
<span class="pl-s1">  <span class="pl-k">var</span> sysRole <span class="pl-k">=</span> {};</span>
<span class="pl-s1">  <span class="pl-en">$</span>(<span class="pl-k">function</span>() {</span>
<span class="pl-s1">      <span class="pl-c"><span class="pl-c">/*</span></span></span>
<span class="pl-s1"><span class="pl-c"> * datagrid init</span></span>
<span class="pl-s1"><span class="pl-c"> <span class="pl-c">*/</span></span></span>
<span class="pl-s1">      <span class="pl-c"><span class="pl-c">//</span> ...</span></span>
<span class="pl-s1"></span>
<span class="pl-s1">      <span class="pl-c"><span class="pl-c">/*</span></span></span>
<span class="pl-s1"><span class="pl-c"> * datagrid CRUD</span></span>
<span class="pl-s1"><span class="pl-c"> <span class="pl-c">*/</span></span></span>
<span class="pl-s1"></span>
<span class="pl-s1">      <span class="pl-c"><span class="pl-c">/*</span></span></span>
<span class="pl-s1"><span class="pl-c"> * datagird search</span></span>
<span class="pl-s1"><span class="pl-c"> <span class="pl-c">*/</span></span></span>
<span class="pl-s1"></span>
<span class="pl-s1">  });</span>
<span class="pl-s1">  &lt;/<span class="pl-ent">script</span>&gt;</span>

  <span class="pl-c"><span class="pl-c">&lt;%--</span> 2. content, don't need Body <span class="pl-c">--%&gt;</span></span>
  <span class="pl-c"><span class="pl-c">&lt;!--</span>  ... <span class="pl-c">--&gt;</span></span>

  <span class="pl-c"><span class="pl-c">&lt;%--</span> grid contextmenu <span class="pl-c">--%&gt;</span></span>
  <span class="pl-c"><span class="pl-c">&lt;!--</span>  ... <span class="pl-c">--&gt;</span></span>

  <span class="pl-c"><span class="pl-c">&lt;%--</span> 3. Dialog Page<span class="pl-c">--%&gt;</span></span>
  <span class="pl-c"><span class="pl-c">&lt;!--</span>  ... <span class="pl-c">--&gt;</span></span></pre>
    </div> </li> 
  </ul> </li> 
 <li> <p><strong>And configure access permissions</strong></p> 
  <ol> 
   <li><p>User Admin to Add <code>Menu Permission</code>(<code>/Dept/page</code>, click on the menu to access the action requested JSP views)</p></li> 
   <li><p>User Admin to Add <code>Operation Permission</code>(CRUD Permission, Show Controller Permission)</p></li> 
   <li><p>Assign <code>permissions and menu</code> operations for user</p></li> 
  </ol> </li> 
</ol> 
<h2> <a id="run-with-war-or-jar" class="anchor" href="#run-with-war-or-jar" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Run with WAR or JAR</h2> 
<h3> <a id="run-with-war" class="anchor" href="#run-with-war" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Run with WAR</h3> 
<ol> 
 <li><p>Use <code>pom_war.xml</code> to <code>pom.xml</code></p></li> 
 <li><p>Uncomment the comment, Run <code>EasyEEWarApplication.java</code> </p></li> 
</ol> 
<h3> <a id="run-with-jar" class="anchor" href="#run-with-jar" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Run with JAR</h3> 
<ol> 
 <li><p>Use <code>pom_jar.xml</code> to <code>pom.xml</code></p></li> 
 <li><p>Uncomment the comment, Run <code>EasyEEJarApplication.java</code> </p></li> 
</ol> 
<h2> <a id="other-configuration-instructions" class="anchor" href="#other-configuration-instructions" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Other configuration instructions</h2> 
<h3> <a id="1-easyssh-ajax-response" class="anchor" href="#1-easyssh-ajax-response" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>1. EasySSH Ajax Response</h3> 
<ul> 
 <li> <p>EasySSH Ajax Response JSON:</p> 
  <div class="highlight highlight-source-json">
   <pre>{
  <span class="pl-ii">statusCode</span>: <span class="pl-ii">status</span> <span class="pl-ii">code</span>,  
  <span class="pl-ii">msg</span>: <span class="pl-ii">message</span>,
  <span class="pl-ii">callback</span>: <span class="pl-ii">callback</span> <span class="pl-ii">function</span>,
  <span class="pl-ii">locationUrl</span>: <span class="pl-ii">goto</span> <span class="pl-ii">location</span>,
  <span class="pl-ii">//...</span> <span class="pl-ii">other</span> <span class="pl-ii">data</span>
}</pre>
  </div> </li> 
 <li> <p>BaseAction out JSON method：</p> 
  <div class="highlight highlight-source-java">
   <pre><span class="pl-c"><span class="pl-c">//</span> you can define JSON root data </span>
setJsonRoot(<span class="pl-smi">Object</span>);
<span class="pl-c"><span class="pl-c">//</span> JSON include your Object</span>
setJsonMap(<span class="pl-smi">Object</span><span class="pl-k">.</span><span class="pl-c1">..</span>)
<span class="pl-c"><span class="pl-c">//</span> JSON include your Object and EasySSH Ajax response</span>
setJsonMsgMap(<span class="pl-smi">Object</span><span class="pl-k">.</span><span class="pl-c1">..</span>)
<span class="pl-c"><span class="pl-c">//</span> JSON include your Object, Pagination data and EasySSH Ajax response</span>
setJsonPaginationMap(<span class="pl-smi">PageBean</span>, <span class="pl-smi">Object</span><span class="pl-k">.</span><span class="pl-c1">..</span>)</pre>
  </div> </li> 
</ul> 
<h3> <a id="2-baseaction" class="anchor" href="#2-baseaction" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>2. BaseAction</h3> 
<ul> 
 <li>Servlet API(request, application )</li> 
 <li>Get PageBean：super.getPageBean() </li> 
 <li>JSON parameter(pagination, Ajax response)</li> 
 <li>JSON response method(<code>setJsonRoot</code>, <code>setJsonMap</code>, <code>setJsonMsgMap</code>, <code>setJsonPaginationMap</code>)</li> 
 <li>reloadPermissions(): refreshing the user's current permission after to modify permissions</li> 
 <li>utils</li> 
</ul> 
<h3> <a id="3-easymybatis-pagination" class="anchor" href="#3-easymybatis-pagination" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>3. EasyMyBatis-Pagination</h3> 
<p><a href="https://github.com/ushelp/EasyMyBatis-Pagination" title="EasyMyBatis-Pagination">EasyMyBatis-Pagination</a> Is a generic paging plug-in for the MyBaits framework. Provides the PageBean automatic paging data encapsulation, the EasyCriteria paging condition object, and the automated paging SQL that supports databases based on both the <code>Mappers</code> interface and <code>SQLID</code>.</p> 
<p>The EasyEE MyBaits version integrates this plug-in to complete paging.</p> 
<h4> <a id="pagebean-paging-and-query-condition-processing" class="anchor" href="#pagebean-paging-and-query-condition-processing" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>PageBean paging and query condition processing</h4> 
<ul> 
 <li> <p>DAO interface:</p> 
  <div class="highlight highlight-source-java">
   <pre><span class="pl-k">public</span> <span class="pl-k">class</span> <span class="pl-en">EmpDAO</span>{
  <span class="pl-k">public</span> <span class="pl-smi">List</span> <span class="pl-en">pagination</span>(<span class="pl-smi">PageBean</span> <span class="pl-v">pageBean</span>);
  <span class="pl-c"><span class="pl-c">//</span> ...</span>
}</pre>
  </div> </li> 
 <li> <p>SQL Mapper:</p> 
  <div class="highlight highlight-text-xml">
   <pre>&lt;<span class="pl-ent">select</span> <span class="pl-e">id</span>=<span class="pl-s"><span class="pl-pds">&quot;</span>pagination<span class="pl-pds">&quot;</span></span> <span class="pl-e">resultType</span>=<span class="pl-s"><span class="pl-pds">&quot;</span>Emp<span class="pl-pds">&quot;</span></span>&gt;
        ${autoSQL}
&lt;/<span class="pl-ent">select</span>&gt;</pre>
  </div> </li> 
 <li> <p>Service:</p> 
  <div class="highlight highlight-source-java">
   <pre><span class="pl-c"><span class="pl-c">//</span> Query interface</span>
<span class="pl-k">@Transactional</span>
<span class="pl-k">public</span> <span class="pl-k">interface</span> <span class="pl-en">EmpService</span> {
    <span class="pl-c"><span class="pl-c">//</span>...</span>

    <span class="pl-c"><span class="pl-c">//</span> Pagination</span>
    <span class="pl-k">@Transactional</span>(<span class="pl-c1">readOnly</span><span class="pl-k">=</span><span class="pl-c1">true</span>)
    <span class="pl-k">public</span> <span class="pl-k">void</span> <span class="pl-en">findByPage</span>(<span class="pl-smi">PageBean</span> <span class="pl-v">pageBean</span>,<span class="pl-smi">EmpCriteria</span> <span class="pl-v">empCriteria</span>); <span class="pl-c"><span class="pl-c">//</span> EmpCriteria parameters are optional</span>
}

<span class="pl-c"><span class="pl-c">//</span> Query implementation class</span>
<span class="pl-k">@Service</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>empService<span class="pl-pds">&quot;</span></span>)
<span class="pl-k">public</span> <span class="pl-k">class</span> <span class="pl-en">EmpServiceImpl</span> <span class="pl-k">extends</span> <span class="pl-e">BaseService</span> <span class="pl-k">implements</span> <span class="pl-e">EmpService</span> {

    <span class="pl-k">@Resource</span>
    <span class="pl-smi">EmpDAO</span> empDAO;

    <span class="pl-k">@Override</span>
    <span class="pl-k">public</span> <span class="pl-k">void</span> <span class="pl-en">findByPage</span>(<span class="pl-smi">PageBean</span> <span class="pl-v">pageBean</span>, <span class="pl-smi">EmpCriteria</span> <span class="pl-v">empCriteria</span>) {
        pageBean<span class="pl-k">.</span>setEasyCriteria(empCriteria);

        pageBean<span class="pl-k">.</span>setSelect(<span class="pl-s"><span class="pl-pds">&quot;</span>e.empno, e.ename, e.job, d.deptno, d.dname<span class="pl-pds">&quot;</span></span>);
        pageBean<span class="pl-k">.</span>setFrom(<span class="pl-s"><span class="pl-pds">&quot;</span> module_emp e, module_dept d <span class="pl-pds">&quot;</span></span>);
        pageBean<span class="pl-k">.</span>addCondition(<span class="pl-s"><span class="pl-pds">&quot;</span>and e.deptno=d.deptno<span class="pl-pds">&quot;</span></span>);
        pageBean<span class="pl-k">.</span>setPrimaryTable(<span class="pl-s"><span class="pl-pds">&quot;</span>e<span class="pl-pds">&quot;</span></span>);

        <span class="pl-c"><span class="pl-c">//</span> Paged by condition query</span>
        empDAO<span class="pl-k">.</span>pagination(pageBean);
    }

    <span class="pl-c"><span class="pl-c">//</span>...</span>
}</pre>
  </div> </li> 
 <li> <p>PageBean Query Settings Example 1:</p> <p>Setting syntax: <code>SELECT &lt;select&gt; FROM &lt;from&gt; WHERE &lt;conditions&gt; OREDER BY &lt;order&gt; &lt;sortOrder&gt;,&lt;lastSort&gt;,[primaryTable.ROWID]</code></p> 
  <div class="highlight highlight-source-java">
   <pre>  <span class="pl-smi">PageBean</span> pb<span class="pl-k">=</span><span class="pl-k">new</span> <span class="pl-smi">PageBean</span>();
  <span class="pl-c"><span class="pl-c">//</span> SELECT Statement; optional; default is  *</span>
  pb<span class="pl-k">.</span>setSelect(<span class="pl-s"><span class="pl-pds">&quot;</span>*<span class="pl-pds">&quot;</span></span>); 
  <span class="pl-c"><span class="pl-c">//</span> From Statement; required</span>
  pb<span class="pl-k">.</span>setFrom(<span class="pl-s"><span class="pl-pds">&quot;</span>Account account<span class="pl-pds">&quot;</span></span>);
  <span class="pl-c"><span class="pl-c">//</span> WHERE Statement; optional; default is  ''</span>
  pb<span class="pl-k">.</span>setCondition(<span class="pl-s"><span class="pl-pds">&quot;</span> and account.qxid&gt;=10<span class="pl-pds">&quot;</span></span>);
  <span class="pl-c"><span class="pl-c">//</span> Additional WHERE condition; optional; default is  ''</span>
  <span class="pl-c"><span class="pl-c">//</span>pb.addCondition(&quot;&quot;); </span>
  <span class="pl-c"><span class="pl-c">//</span> Column sorting; optional; default is  ''</span>
  pb<span class="pl-k">.</span>setSort(<span class="pl-s"><span class="pl-pds">&quot;</span>account.accountid<span class="pl-pds">&quot;</span></span>);
  <span class="pl-c"><span class="pl-c">//</span> Sorting method; optional; default is  'asc'</span>
  pb<span class="pl-k">.</span>setSortOrder(<span class="pl-s"><span class="pl-pds">&quot;</span>desc<span class="pl-pds">&quot;</span></span>);
  <span class="pl-c"><span class="pl-c">//</span> The current page; optional; default is  1</span>
  pb<span class="pl-k">.</span>setPageNo(<span class="pl-c1">1</span>);
  <span class="pl-c"><span class="pl-c">//</span> Page number; optional; default is  10</span>
  pb<span class="pl-k">.</span>setRowsPerPage(<span class="pl-c1">4</span>);

  <span class="pl-c"><span class="pl-c">//</span> Condition paging query</span>
  xxxDAO<span class="pl-k">.</span>pagination(pageBean);</pre>
  </div> </li> 
 <li> <p>PageBean query settings example 2:</p> 
  <div class="highlight highlight-source-java">
   <pre><span class="pl-smi">PageBean</span> pb<span class="pl-k">=</span><span class="pl-k">new</span> <span class="pl-smi">PageBean</span>();
pb<span class="pl-k">.</span>setPageNo(<span class="pl-c1">2</span>);
pb<span class="pl-k">.</span>setRowsPerPage(<span class="pl-c1">5</span>);
<span class="pl-c"><span class="pl-c">//</span> data sql</span>
pb<span class="pl-k">.</span>setSql(<span class="pl-s"><span class="pl-pds">&quot;</span>select * from Emp where empno&lt;=80 and ename like #{ename} limit 10,5<span class="pl-pds">&quot;</span></span>); 
<span class="pl-c"><span class="pl-c">//</span> total sql</span>
pb<span class="pl-k">.</span>setCountSQL(<span class="pl-s"><span class="pl-pds">&quot;</span>select count(*) from Emp where empno&lt;=80 and ename like #{ename}<span class="pl-pds">&quot;</span></span>); 

<span class="pl-c"><span class="pl-c">//</span> Set parameter values</span>
<span class="pl-k">Map&lt;<span class="pl-smi">String</span>, <span class="pl-smi">Object</span>&gt;</span> values<span class="pl-k">=</span><span class="pl-k">new</span> <span class="pl-k">HashMap&lt;<span class="pl-smi">String</span>,<span class="pl-smi">Object</span>&gt;</span>();
values<span class="pl-k">.</span>put(<span class="pl-s"><span class="pl-pds">&quot;</span>ename<span class="pl-pds">&quot;</span></span>, <span class="pl-s"><span class="pl-pds">&quot;</span>%a%<span class="pl-pds">&quot;</span></span>);
pb<span class="pl-k">.</span>setSqlParameterValues(values);

xxxDAO<span class="pl-k">.</span>pagination(pageBean);</pre>
  </div> </li> 
</ul> 
<h4> <a id="easycriteria-criteria-queries" class="anchor" href="#easycriteria-criteria-queries" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>EasyCriteria criteria queries</h4> 
<ol> 
 <li><p>Create <strong>EasyCriteria</strong> Class, must <code>extends EasyCriteria implements Serializable</code></p></li> 
 <li><p>create method <code>getCondition()</code></p></li> 
</ol> 
<ul> 
 <li> <p>Example</p> 
  <div class="highlight highlight-source-java">
   <pre><span class="pl-c"><span class="pl-c">/*</span>*</span>
<span class="pl-c"> * </span>
<span class="pl-c"> * @author easyproject.cn</span>
<span class="pl-c"> * @version 1.0</span>
<span class="pl-c"> *</span>
<span class="pl-c"> <span class="pl-c">*/</span></span>
<span class="pl-k">public</span> <span class="pl-k">class</span> <span class="pl-en">SysUserCriteria</span> <span class="pl-k">extends</span> <span class="pl-e">EasyCriteria</span> <span class="pl-k">implements</span> <span class="pl-e">java.io<span class="pl-k">.</span>Serializable</span> {

    <span class="pl-c"><span class="pl-c">//</span> Fields</span>
    <span class="pl-k">private</span> <span class="pl-k">static</span> <span class="pl-k">final</span> <span class="pl-k">long</span> serialVersionUID <span class="pl-k">=</span> <span class="pl-c1">1L</span>;
    <span class="pl-c"><span class="pl-c">/*</span></span>
<span class="pl-c">     * 1. fields</span>
<span class="pl-c">     <span class="pl-c">*/</span></span>
    <span class="pl-k">private</span> <span class="pl-smi">String</span> name;
    <span class="pl-k">private</span> <span class="pl-smi">String</span> status;

     <span class="pl-c"><span class="pl-c">/*</span></span>
<span class="pl-c">     * 2. core method</span>
<span class="pl-c">     <span class="pl-c">*/</span></span>
    <span class="pl-k">public</span> <span class="pl-smi">String</span> <span class="pl-en">getCondition</span>() {
        values<span class="pl-k">.</span>clear(); <span class="pl-c"><span class="pl-c">//</span>clear</span>
        <span class="pl-smi">StringBuffer</span> condition <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-smi">StringBuffer</span>();
        <span class="pl-k">if</span> (<span class="pl-smi">StringUtils</span><span class="pl-k">.</span>isNotNullAndEmpty(<span class="pl-c1">this</span><span class="pl-k">.</span>getDname())) {
            condition<span class="pl-k">.</span>append(<span class="pl-s"><span class="pl-pds">&quot;</span> and dname like #{dname}<span class="pl-pds">&quot;</span></span>);
            values<span class="pl-k">.</span>put(<span class="pl-s"><span class="pl-pds">&quot;</span>dname<span class="pl-pds">&quot;</span></span>, <span class="pl-s"><span class="pl-pds">&quot;</span>%<span class="pl-pds">&quot;</span></span> <span class="pl-k">+</span> <span class="pl-c1">this</span><span class="pl-k">.</span>getDname() <span class="pl-k">+</span> <span class="pl-s"><span class="pl-pds">&quot;</span>%<span class="pl-pds">&quot;</span></span>);
        }
        <span class="pl-k">if</span> (<span class="pl-smi">StringUtils</span><span class="pl-k">.</span>isNotNullAndEmpty(<span class="pl-c1">this</span><span class="pl-k">.</span>getLoc())) {
            condition<span class="pl-k">.</span>append(<span class="pl-s"><span class="pl-pds">&quot;</span> and loc like #{loc}<span class="pl-pds">&quot;</span></span>);
            values<span class="pl-k">.</span>put(<span class="pl-s"><span class="pl-pds">&quot;</span>loc<span class="pl-pds">&quot;</span></span>, <span class="pl-s"><span class="pl-pds">&quot;</span>%<span class="pl-pds">&quot;</span></span> <span class="pl-k">+</span> <span class="pl-c1">this</span><span class="pl-k">.</span>getLoc() <span class="pl-k">+</span> <span class="pl-s"><span class="pl-pds">&quot;</span>%<span class="pl-pds">&quot;</span></span>);
        }
        <span class="pl-k">return</span> condition<span class="pl-k">.</span>toString();
    }
     <span class="pl-c"><span class="pl-c">/*</span></span>
<span class="pl-c">     * 3. Setters &amp; Getters...</span>
<span class="pl-c">     <span class="pl-c">*/</span></span> 
}</pre>
  </div> </li> 
 <li> <p>Usage</p> 
  <div class="highlight highlight-source-java">
   <pre><span class="pl-smi">PageBean</span> pb<span class="pl-k">=</span><span class="pl-k">new</span> <span class="pl-smi">PageBean</span>();
pageBean<span class="pl-k">.</span>setSelect(<span class="pl-s"><span class="pl-pds">&quot;</span>*<span class="pl-pds">&quot;</span></span>);
pageBean<span class="pl-k">.</span>setFrom(<span class="pl-s"><span class="pl-pds">&quot;</span>SysUser<span class="pl-pds">&quot;</span></span>);


<span class="pl-c"><span class="pl-c">//</span> EasyCriteria</span>
<span class="pl-smi">SysUserCriteria</span> usersCriteria <span class="pl-k">=</span><span class="pl-k">new</span> <span class="pl-smi">SysUserCriteria</span>();
usersCriteria<span class="pl-k">.</span>setName(<span class="pl-s"><span class="pl-pds">&quot;</span>A<span class="pl-pds">&quot;</span></span>);
usersCriteria<span class="pl-k">.</span>setStatus(<span class="pl-c1">0</span>);

pb<span class="pl-k">.</span>setEasyCriteria(usersCriteria);

<span class="pl-c"><span class="pl-c">//</span> Find by EasyCriteria</span>
xxxDAO<span class="pl-k">.</span>pagination(pageBean);</pre>
  </div> </li> 
</ul> 
<h3> <a id="5-rights-profile" class="anchor" href="#5-rights-profile" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>5. Rights Profile</h3> 
<ul> 
 <li> <p><strong>Access Configuration</strong></p> 
  <ol> 
   <li><p>Adding menu rights and operation permissions</p></li> 
   <li><p>The menu for the role permissions and rights are allocated</p></li> 
   <li><p>Assign roles to users</p></li> 
  </ol> </li> 
 <li> <p><strong>Show Controller(e.g. WEB-INF/content/jsp/module/dept.jsp)</strong></p> 
  <ol> 
   <li><p>Show Permissions Configuration Permissions action in operation</p></li> 
   <li> <p>Include <code>siro-tags</code> taglig, You will need to display the contents of the definition of control in <code>shiro:hasPermission</code> within,<code>name</code> specified must have permission to display the name of the action</p> 
    <div class="highlight highlight-text-html-jsp">
     <pre>&lt;%@ <span class="pl-k">taglib</span> <span class="pl-e">uri</span>=<span class="pl-s"><span class="pl-pds">&quot;</span>http://shiro.apache.org/tags<span class="pl-pds">&quot;</span></span> <span class="pl-e">prefix</span>=<span class="pl-s"><span class="pl-pds">&quot;</span>shiro<span class="pl-pds">&quot;</span></span>%&gt;

&lt;<span class="pl-ent">shiro:hasPermission</span> <span class="pl-e">name</span>=<span class="pl-s"><span class="pl-pds">&quot;</span>deptDeleteShow<span class="pl-pds">&quot;</span></span>&gt;
&lt;<span class="pl-ent">div</span> <span class="pl-e">onclick</span>=<span class="pl-s"><span class="pl-pds">&quot;</span>$('#deptDataGrid').edatagrid('destroyRow')<span class="pl-pds">&quot;</span></span> <span class="pl-e">data-options</span>=<span class="pl-s"><span class="pl-pds">&quot;</span>iconCls:'icon-remove'<span class="pl-pds">&quot;</span></span>&gt;Delete&lt;/<span class="pl-ent">div</span>&gt;
&lt;/<span class="pl-ent">shiro:hasPermission</span>&gt;</pre>
    </div> </li> 
   <li><p>Assign rights for users</p></li> 
  </ol> </li> 
</ul> 
<h3> <a id="6-add-ons" class="anchor" href="#6-add-ons" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>6. Add-ons:</h3> 
<ul> 
 <li> <p><strong>EasyShiro</strong> (<a href="http://easyproject.cn/easyshiro/en/index.jsp#readme" title="EasShiro API">API</a>)</p> <p>EasyShiro based Shiro is a security extension components. Database rights management and Web URL authorization RBAC (Role Based Access Control) Web-based permission model provides universal support. EasyShiro simplifies security integration, and verification code, auto login, login is locked, an error message management, interceptors, Ajax, etc. in response to a more powerful and comprehensive feature support, only a simple configuration can be.</p> </li> 
 <li> <p><strong>EasyFilter Jave Web Request paramtere filter</strong> (<a href="http://easyproject.cn/easyfilter/zh-cn/index.jsp#readme" title="EasyFilter API">API</a>)</p> <p>EasyFilter is a Jave Web content filtering request replacement of a component, supports the use of properties or xml configuration file to customize the filter configuration, the user can request the following information to filter replacement:</p> 
  <ol> 
   <li><p>Replace special characters (such as: &amp; lt ;, &amp; gt; special tags, scripts, etc.)</p></li> 
   <li><p>Illegal keyword substitution (such as: network situation does not allow China's special keywords)</p></li> 
   <li><p>SQL-injection filter (eg:%, *, or, delete, and so on SQL special keyword)</p></li> 
  </ol> <p><strong>In <code>easyFilter.xml</code> has predefined default alternative arrangement.</strong></p> </li> 
 <li> <p><strong>EasyCommons</strong> (<a href="http://easyproject.cn/easycommons/zh-cn/index.jsp#readme" title="EasyCommons API">API</a>)</p> 
  <ul> 
   <li> <p>EasyCommons-imageutils</p> <p>Provide a picture compression, picture address extraction, image watermarking tools. </p> </li> 
   <li> <p>EasyCommons-objectutils</p> <p>Provided instead of Java Properties object properties file operations component.</p> </li> 
   <li> <p>EasyCommons-propertiesutils</p> <p>Provided (<code>FieldExpression</code>) field expression object attribute extraction based on object attribute filter, waited in vain for the object attribute is set Obejct object manipulation components.</p> </li> 
  </ul> </li> 
</ul> 
<h3> <a id="7-easyuiex" class="anchor" href="#7-easyuiex" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>7. EasyUIEx</h3> 
<p><a href="http://easyproject.cn/easyuiex" title="EasyUIEx API">EasyUIEx API</a> use jQuery EasyUI framework for the development of extensible plug-ins, mainly for common functions EasyUI framework encapsulates and expansion EasyUI can greatly increase the ease of use, simplify operational complexity, and provide additional functionality.</p> 
<p>Use during project development jQuery EasyUI + EasyUIEx architecture can greatly simplify the complexity EasyUI framework uses, especially in the various aspects of CRUD data grid, he made a high degree of packaging.</p> 
<p>In the project, a priority search EasyUIEx API functions can be done to achieve a multiplier effect.</p> 
<h2> <a id="demo" class="anchor" href="#demo" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Demo</h2> 
<p><a href="http://www.easyproject.cn/easyee" title="Demo">Demo Online</a></p> 
<p>Username: <code>demo</code></p> 
<p>Password: <code>111111</code></p> 
<p><a href="../images/easyee.png" target="_blank"><img src="../images/easyee.png" alt="Demo" style="max-width:100%;" /></a></p> 
<h2> <a id="end" class="anchor" href="#end" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>End</h2> 
<p><a href="http://www.easyproject.cn/easyee/en/index.jsp#demo" title="Demo - English]">Demo - English</a></p> 
<p><a href="http://www.easyproject.cn/easyee/en/index.jsp" title="The official home page">The official home page</a></p> 
<p><a href="http://www.easyproject.cn/easyee/en/index.jsp#donation" title="Comments">Comments</a></p> 
<p>If you have more comments, suggestions or ideas, please contact me.</p> 
<p>Contact, Feedback, Custom, Train Email：<a href="mailto:inthinkcolor@gmail.com">inthinkcolor@gmail.com</a></p> 
<p><a href="http://www.easyproject.cn" title="EasyProject Home">http://www.easyproject.cn</a></p> 
<p>We believe that the contribution of each bit by bit, will be driven to produce more and better free and open source products a big step.</p> 
<p><strong>Thank you donation to support the server running and encourage more community members.</strong></p> 
<p><a href="https://www.paypal.me/easyproject/10" title="Make payments with PayPal - it's fast, free and secure!"><img src="https://camo.githubusercontent.com/25fd45a9c199091fd684c9f11b37c386b4301087/687474703a2f2f7777772e6561737970726f6a6563742e636e2f696d616765732f70617970616c646f6e6174696f6e352e6a7067" alt="PayPal" data-canonical-src="http://www.easyproject.cn/images/paypaldonation5.jpg" style="max-width:100%;" /></a></p> 
<h2> <a id="end-1" class="anchor" href="#end-1" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>END</h2> 
<h3> <a id="the-official-home-page" class="anchor" href="#the-official-home-page" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a><a href="http://www.easyproject.cn/easyuiex/en/index.jsp" title="The official home page">The official home page</a> </h3> 
<p><a href="http://www.easyproject.cn/easyuiex/en/index.jsp#donation" title="Comments">Comments</a></p> 
<p>If you have more comments, suggestions or ideas, please contact me.</p> 
<h3> <a id="官方主页" class="anchor" href="#%E5%AE%98%E6%96%B9%E4%B8%BB%E9%A1%B5" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a><a href="http://www.easyproject.cn/easyuiex/zh-cn/index.jsp" title="官方主页">官方主页</a> </h3> 
<p><a href="http://www.easyproject.cn/easyuiex/zh-cn/index.jsp#donation" title="留言评论">留言评论</a></p> 
<p>如果您有更好意见，建议或想法，请联系我。</p> 
<p>Email：<a href="mailto:inthinkcolor@gmail.com">inthinkcolor@gmail.com</a></p> 
<p><a href="http://www.easyproject.cn" title="EasyProject Home">http://www.easyproject.cn</a></p> 
<p>We believe that the contribution of each bit by bit, will be driven to produce more and better free and open source products a big step.</p> 
<p><strong>Thank you donation to support the server running and encourage more community members.</strong></p> 
<p><a href="https://www.paypal.me/easyproject/10" title="Make payments with PayPal - it's fast, free and secure!"><img src="https://camo.githubusercontent.com/25fd45a9c199091fd684c9f11b37c386b4301087/687474703a2f2f7777772e6561737970726f6a6563742e636e2f696d616765732f70617970616c646f6e6174696f6e352e6a7067" alt="PayPal" data-canonical-src="http://www.easyproject.cn/images/paypaldonation5.jpg" style="max-width:100%;" /></a></p>
</body>
</html>
